package com.zkn.orm.spring.data.jpa.model;

/**
 * 将当前主键的值单独保存到一个数据库的表中，主键的值每次都是从指定的表中查询来获得
 * 
 * 使用这个策略需要创建一张表：
 * CREATE TABLE PKValueGenerator (
 *		pkValueGeneratorID bigint NOT NULL IDENTITY(1,1) ,
 *		pkColumnKey nvarchar(100) NOT NULL ,
 *		pkColumnValue bigint NOT NULL 
 *	);
 * ALTER TABLE PKValueGenerator ADD CONSTRAINT PK_PKValueGenerator PRIMARY KEY (pkValueGeneratorID)
 *
 * 表记录说明：
 * 		表 Address 需要通过该策略来产生 PK 列 addressId 的值，则需要手动添加一条记录：
 * 		ID = 最大记录值+1，GEN_TABLE_NAME = Address，GEN_TABLE_VALUE = addressId的初始值。
 * 
 * 使用实例：
 *  @Id
 *  @GeneratedValue(strategy = GenerationType.TABLE, generator = PKValueGenerator.GENERATOR)
 *  @TableGenerator(name = PKValueGenerator.GENERATOR,
 *  	schema = "fw", table = PKValueGenerator.GENERATOR, 
 *  	pkColumnName = PKValueGenerator.PK_COLUMN_NAME, 
 *  	valueColumnName = PKValueGenerator.VALUE_COLUMN_NAME, 
 *  	pkColumnValue = "fw.ActorRole", // PK Column Key Value
 *  	allocationSize = 1)
 *  private Integer actorRoleId;
 * 
 * 
 * @author frank.su
 *
 */
public class PKValueGenerator {
	/**
	 * Generator Table Name
	 */
	public static final String TABLE = "PKValueGenerator"; 
	/**
	 * Generator Table column name for storing the PK column name or key
	 */
	public static final String PK_COLUMN_NAME = "pkColumnKey"; 
	/**
	 * Generator Table column name for storing the PK column value.
	 */
	public static final String VALUE_COLUMN_NAME = "pkColumnValue"; 
}